/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package controlador;

import java.awt.Toolkit;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import modelo.Datos;
import modelo.DatosJpaController;
import modelo.exceptions.NonexistentEntityException;
import vista.PrincipalVista;

/**
 *
 * @author Rodrigo Martínez
 */


public class ABControlador {
    
    PrincipalVista principal;
    DefaultTableModel dtm;
    DatosJpaController datosMgr;
    
    public ABControlador(PrincipalVista principal){
        this.principal = principal;
        dtm = (DefaultTableModel) principal.principalTable.getModel();
        datosMgr = new DatosJpaController();
    }
    
    public void agregar(){
        Datos datos = new Datos();
        datos.setFechaAlta(obtenerTiempo());
        datos.setFechaBaja("No modificado");
        datos.setNombreEquipo(principal.nombreEquipoTextField.getText());
        datos.setUsuario(principal.usuarioTextField.getText());
        datos.setDireccionIP(principal.direccionIPTextField.getText());
        datos.setDireccionMAC(principal.direccionMACTextField.getText());
        datos.setVlan(principal.vlanTextField.getText());
        datos.setPuerto(principal.puertoTextField.getText());
        //Para obtener la lista de clientes
        try{
            datosMgr.create(datos);
            principal.agregarIU.dispose();
            actualizarTabla();
        }catch(Exception e){
            JOptionPane.showMessageDialog(principal, "Error al guardar", "Error", JOptionPane.ERROR_MESSAGE);
            Toolkit.getDefaultToolkit().beep();
            System.out.println("Error " + e);
        }
    }
    public void editar(){
        int clienteSeleccionado = principal.principalTable.getSelectedRows()[0];
        String nombre = dtm.getValueAt(clienteSeleccionado, 2).toString();
        List datosTodo = datosMgr.findDatosEntities();
        Iterator<Datos> iterator = datosTodo.iterator();
	//Se agregan los registros
        while (iterator.hasNext()) {
            Datos datos = (Datos) iterator.next();
            if(nombre.equals(datos.getNombreEquipo())){
                try {
                    principal.nombreEquipoTextField.setText(datos.getNombreEquipo());
                    principal.usuarioTextField.setText(datos.getUsuario());
                    principal.direccionIPTextField.setText(datos.getDireccionIP());
                    principal.direccionMACTextField.setText(datos.getDireccionMAC());
                    principal.vlanTextField.setText(datos.getVlan());
                    principal.puertoTextField.setText(datos.getPuerto());
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(principal, "Error al actualizar",
                            "Error", JOptionPane.ERROR_MESSAGE);
                    Toolkit.getDefaultToolkit().beep();
                }
            }     
        }
        principal.agregarIU.setLocationRelativeTo(null);
        principal.agregarIU.setVisible(true);
    }
    
    public void actualizarBD(){
        int clienteSeleccionado = principal.principalTable.getSelectedRows()[0];
        String nombre = dtm.getValueAt(clienteSeleccionado, 2).toString();
        List datosTodo = datosMgr.findDatosEntities();
        Iterator<Datos> iterator = datosTodo.iterator();
	//Se agregan los registros
        while (iterator.hasNext()) {
            Datos datos = (Datos) iterator.next();
            if(nombre.equals(datos.getNombreEquipo())){
                try {
                    datos.setFechaBaja(obtenerTiempo());
                    datos.setNombreEquipo(principal.nombreEquipoTextField.getText());
                    datos.setUsuario(principal.usuarioTextField.getText());
                    datos.setDireccionIP(principal.direccionIPTextField.getText());
                    datos.setDireccionMAC(principal.direccionMACTextField.getText());
                    datos.setVlan(principal.vlanTextField.getText());
                    datos.setPuerto(principal.puertoTextField.getText());
                    datosMgr.edit(datos);
                    principal.agregarIU.dispose();
                    actualizarTabla();
                } catch (NonexistentEntityException ex) {
                    JOptionPane.showMessageDialog(principal, "Error al actualizar",
                            "Error", JOptionPane.ERROR_MESSAGE);
                    Toolkit.getDefaultToolkit().beep();
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(principal, "Error al actualizar",
                            "Error", JOptionPane.ERROR_MESSAGE);
                    Toolkit.getDefaultToolkit().beep();
                }
            }     
        }
    }
    
    public void eliminar(){
        int[] clienteSeleccionado = principal.principalTable.getSelectedRows();
        for(int i = 0 ; i < clienteSeleccionado.length ; i++){
            String nombre = dtm.getValueAt(clienteSeleccionado[i], 2).toString();
            List datosTodo = datosMgr.findDatosEntities();
            Iterator<Datos> iterator = datosTodo.iterator();
            //Se agregan los registros
            while (iterator.hasNext()) {
                Datos datos = (Datos) iterator.next();
                if(nombre.equals(datos.getNombreEquipo())){
                    try {
                        datosMgr.destroy(Integer.valueOf(datos.getId()));
                    } catch (NonexistentEntityException ex) {
                        JOptionPane.showMessageDialog(principal, "Error al eliminar", "Error", JOptionPane.ERROR_MESSAGE);
                        Toolkit.getDefaultToolkit().beep();
                    }
                }     
            }
        }
        actualizarTabla();
    }
    public void actualizarTabla(){
        //Se limpia la tabla
        while (dtm.getRowCount() > 0) {
                dtm.removeRow(0);
        }        
        List datosTodo = datosMgr.findDatosEntities();
        Iterator<Datos> iterator = datosTodo.iterator();
	//Se agregan los registros
        while (iterator.hasNext()) {
                Datos datos = (Datos) iterator.next();
                Object[] nuevoCliente = {datos.getFechaAlta(),datos.getFechaBaja(),
                        datos.getNombreEquipo(),datos.getUsuario(),datos.getDireccionIP(),datos.getDireccionMAC(),
                        datos.getVlan(), datos.getPuerto()};
                dtm.addRow(nuevoCliente); 
        }
    }
    
    private String obtenerTiempo(){
    	Date horaActual=new Date();

    	String hora= (horaActual.getYear()+1900)+"-"+(horaActual.getMonth()+1)+"-"+horaActual.getDate()+" "+ 
			       horaActual.getHours()+":"+	   horaActual.getMinutes()+":"+ horaActual.getSeconds();
    	
    	return hora;
    }
}

